﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 类和对象01
{
    //int b = 2;
    //public void Eat()
    //{

    //}

    class Program
    {
        int a = 1;
        
        static void Main(string[] args)
        {
            // 类的作用 —— 为了分类
            // 类是具有相同特征（属性）和行为（方法）的抽象

            // 使用class关键字声明（定义一个新的类型），它与enum\Struct一样，关键字后面是类型名称，在使用定义的类时，要用类型名来定义变量
            // Program program;



            // 对象每一个是特指的，类是泛指
            // 对象通过new关键字创建

            Car myFirstCar = new Car();

            // 类里面的特征我们如何去描述，使用变量去描述，只不过这个变量在类里面换了名字，叫做字段，是类的成员之一

            // 通过对象和字段取访问类的成员
            // 类内部的字段默认是私有的private，外界不可访问，要想外界访问到，需要加public修饰符
            myFirstCar.brand = "BMW";
            myFirstCar.price = 10000;
            Console.WriteLine(myFirstCar.brand);
            Console.WriteLine(myFirstCar.price);

            // 类的成员之二：方法，用来表示类的行为
            // 方法是一种代码重用机制，只要功能相同处理的数据不同，就可以把代码已方法的形式定义出来，然后当使用时，只需要调用方法即可
            // 这样可以极大的提高开发效率，同时使程序的可读性增强
            // 方法有4种，无参数无返回值的、有参数无返回值的（set方法）、有返回无参数的（get方法）、有参数有返回值
            // 方法就是多条语句的代码块，类内部的操作语句是不能写在类下面的，必须要写在方法里面才能编译通过
            // 方法必须定义在类里面
            // 形参，没有实际的意义，他只是告诉我们在使用该方法的时候，要处理什么类型的数据
            // 实参，实际传入需要参与运算的参数
            // 返回值称为方法的值，是方法内部代码的结果，只不过要通过return返回给主调方法，
            // 在调用方法之后我们可以定义一个与方法返回值类型一样的变量去接受返回值
            // 一个方法最多只有一个返回值
            // 方法即使没有有返回值也可以使用return结束方法的执行，回到主调方法当中， return后面的语句不会执行，（return可以跳出方法的执行）
            JS();
            // 如何使用方法：有参数的时候，要注意实参的个数和顺序要与形参一一对应
            // M(1, 2, 3);

            // 总结一个方法：
            // 1.是具有特定功能的代码段
            // 2.通俗来说的话就是一连串的语句组合在一起，实现了某一个功能，我们为它取了一个名字，这个名字就是方法名
            // 3.好处是省去重复代码的编写，大大简化了程序，提高了开发效率

            // 属性
        }

        public static double M(int i, double j)
        {
            return i + j;
        }

        public static void JS()
        {
            Console.WriteLine("11111");
            return;
            Console.WriteLine("22222");
        }
    }

    class Car
    {
        //特征：车轮、方向盘、发动机、价格、品牌
        public string brand;    //品牌
        public float price;     //价格
        //行为：行驶、刹车、驻车

        public void Run()
        {

        }
    }

    class Animal
    {

    }
}
